package cn.fj.xiaowei.main.utils.generator;

import cn.fj.xiaowei.main.common.generator.CodeGeneratorBaseMP;
import cn.fj.xiaowei.main.utils.generator.prop.MysqlDatasourceProp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component // 由于该类在启动类的子包中，所以直接使用 @Component 注解注册为 Bean
public class CodeGenerator {

    /**
     * MySQL 数据源连接信息配置对象
     */
    @Autowired
    private MysqlDatasourceProp mysqlDatasourceProp;

    /**
     * 使用基于 Mybatis Plus 构建的代码生成器生成代码
     *
     * @param parentPackage 代码生成后的父包
     * @param outputDir     代码生成后的输出目录
     * @param tableNames    要生成代码的数据库表名数组
     */
    public void generateCodeBaseMP(String parentPackage, String outputDir, String... tableNames) {
        // 创建代码生成器并对其进行配置，然后生成代码
        CodeGeneratorBaseMP
                // 创建 CodeFastGenerator 实例
                .create(mysqlDatasourceProp.getUrl(), mysqlDatasourceProp.getUsername(), mysqlDatasourceProp.getPassword(), parentPackage)
                // 代码生成后的存放目录
                .setOutputDir(outputDir)
                // 根据设置的配置初始化 FastAutoGenerator 实例
                .initGenerator()
                // 对代码生成器进行自定义配置
                .customGenerator(generator -> generator.strategyConfig(builder -> {
                    // 配置需要生成代码的数据库表
                    builder.addInclude(tableNames);
                }))
                // 代码生成器执行，生成代码
                .run();
    }

}
